A graphical user interface (GUI), an alternative to text-based or other user interfaces, allows a user to interact with a computer program through the use of images. A user may interact with a GUI using, for example, a mouse, touch screen, graphics pad, etc. Over time, GUIs have become the primary method through which users interact with computers. Many operating systems (e.g., MICROSOFT WINDOWS, MAC OS X), user applications including productivity software, gaming software, education software, etc., web sites, and so on allow for user interaction through a GUI. GUIs are often implemented using a GUI toolkit, such as the MICROSOFT Foundation Classes, APPLE's Cocoa, Swing, Flash, the X Windows System, etc. These toolkits provide libraries of common frameworks or interactive widgets, such as buttons, context menus, check boxes, drop-down lists, radio buttons, sliders, icons, tooltips, tabs, address bars, windows, dialog boxes, layout managers, and so on. The widgets provide a simple and easy way for the user to interact with the associated software.
GUIs and their associated toolkits are often difficult, if not impossible, to modify or customize by developers or users without access to the underlying code of the interface or toolkit. If a developer wants to add an unsupported widget to a toolkit or customize the graphical representation or behavior of a widget in a manner that is not supported by the toolkit, the developer must integrate the changes into the existing code of the toolkit, which may not be available to the developer. Similarly, the addition of a new widget or functionality to an application requires access to the code of the application and/or cooperation on behalf of the application (i.e., an exposed API or plug-in architecture through which the GUI of the application can be modified or customized in ways envisioned and supported by the developer of the application). Furthermore, because each GUI and toolkit is implemented differently, modifications and customizations can be tedious to implement and integrate into a single GUI or toolkit, let alone every relevant GUI and toolkit.